Leetcode 985. Sum of Even Numbers After Queries

题目描述

时间复杂度:O(N)

空间复杂度:O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Author: Tecker
// 176ms, 28.7MB; beat 96.40%, 100%
class Solution {
public:
vector<int> sumEvenAfterQueries(vector<int>& A, vector<vector<int> >& queries) {
vector<int> res(A.size(), 0);
int sum=0;
A[queries[0][1]]+=queries[0][0];
for(int &num : A) {
if (num%2==0) sum+=num;
}
res[0]=sum;
for(int i=1;i<queries.size();++i) {
int val=queries[i][0];
int idx=queries[i][1];
int tmp = A[idx];
A[idx]+=val;
if (isEven(tmp)) {
if (!isEven(A[idx]))
sum-=tmp;
else
sum+=val;
} else {
if (isEven(A[idx])) sum+=A[idx];
}
res[i]=sum;
}
return res;
}

private:
inline bool isEven(int a) {
return !(a & 1);
}
};

刚开始本来是想要用取模来做的,结果一不小心踩了大坑,以后要注意负数取模的正确计算方式

1
2
3
int mod(int x, int m) {
return (x%m + m)%m;
}

收获: 在不同的语言中,对负数执行取模运算,结果有可能会是不同的

作者

马克鱼

发布于

2019-02-13

更新于

2025-10-12

许可协议